// Author: Mark Richardson
// Date: 05/02/2022
// Multi-rater hierarchical item response model for latent traits with naive prior on the latent traits
// Use standard deviation of the informed ratings for the prior
// Revision date: 10/10/2022
// Delete extraneous dept_group vector
// Proofed 11/09/2022

data {
  
  int<lower = 0> N; // number of ratings
  
  int<lower = 0> A; // number of agencies
  
  int<lower = 0> R; // number of raters
  
  int<lower = 0> D; // number of departments
  
  int<lower = 1, upper = A> aa[N]; // agency index
  
  int<lower = 1, upper = R> rr[N]; // rater index
  
  int<lower = 1, upper = D> dd[R]; // department index
  
  vector[N] y; // vector of ratings
  
  real<lower = 0> sd_naive;
  
}


parameters {
  
  vector[D] mu_alpha; // dept mean for rater intercepts

  vector<lower = 0>[D] mu_beta; // dept mean for rater slopes
  
  vector<lower = 0>[D] sigma_alpha; // dept scale for rater intercepts
  
  vector<lower = 0>[D] sigma_beta; // dept scale for rater slopes
  
  vector[A] x; // latent performance

  real<lower = 0> sigma; // scale of latent performance
  
  vector[R] alpha_tilde;
  
  vector<lower = 0>[R] beta_tilde;

}

transformed parameters {
  
  vector[R] alpha; // rater intercept parameters
  
  vector[R] beta; // rater slope parameters
  
  for (r in 1:R) {
    
    alpha[r] = mu_alpha[dd[r]] + sigma_alpha[dd[r]] * alpha_tilde[r];
    
    beta[r] = mu_beta[dd[r]] + sigma_beta[dd[r]] * beta_tilde[r];
    
  }
}


model {
  
  x ~ normal(0, sd_naive); // Naive prior on latent trait
  
  mu_alpha ~ normal(0, 5);
  
  mu_beta ~ normal(0, 5);
  
  alpha_tilde ~ std_normal();
  
  beta_tilde ~ std_normal();
  
  sigma ~ normal(0, 5);
  
  sigma_alpha ~ normal(0, 5);
  
  sigma_beta ~ normal(0, 5);
  
  for (n in 1:N) {
    
    y[n] ~ normal(alpha[rr[n]] + beta[rr[n]] * x[aa[n]], sigma);

  }
}

